package entidades;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;

/**
 * Entidade Usuario.
 * 
 * @author Lino Bordin e Lucas Pessoa
 *
 */
@Entity
@Table(name = "usuario", uniqueConstraints= @UniqueConstraint(columnNames = {"email"}))
public class Usuario {

	@Id
	@Column(name = "idUsuario") //1k usuarios obrigatorio
	private Integer idUsuario;
	
	@NotNull //obrigatorio
	@Column(name = "senha")
	@Length(min=4, max=16)
	private String senha;
	
	@Column(name = "telefone", length = 10) //com ddd
	private String telefone;
	
	@NotNull //obrigatorio
	@Column(name = "nome", length = 128)
	private String nome;
	
	@NotNull //obrigatorio
	@Column(name = "email", length = 256)
	private String email;
	
	@Column(name = "endereco", length = 128)
	private String endereco;
	
	//private Perfil_usuario perfil_usuario;
	
	@ManyToMany(targetEntity=Perfil.class, fetch=FetchType.EAGER)
	@JoinTable(name="perfil_usuario",
	joinColumns={@JoinColumn(name="cod_usuario", referencedColumnName="idUsuario")},
	inverseJoinColumns={@JoinColumn(name="cod_perfil",referencedColumnName="idPerfil")})
	private Set<Perfil> listaPerfil;
	
	
	/* --------------- Metodos Acessores "Getter's & Setter's" ------------------ */
	
	/**
	 * Retorna a senha do Usuário.
	 * @return senha do usuário.
	 * 
	 */
	public String getSenha() {
		return senha;
	}
	
	/**
	 * Define a senha do Usuário.
	 * @param String senha a ser definida pelo usuário.
	 * 
	 */
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	/**
	 * Retorna o ID do Usuário.
	 * @return ID do usuário.
	 * 
	 */
	public int getIdUsuario() {
		return idUsuario;
	}
	
	/**
	 * Define o ID do Usuário.
	 * @param Int idUsuario a ser definido pelo usuário.
	 * 
	 */
	public void setIdusuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}
	
	/**
	 * Retorna o telefone do Usuário.
	 * @return telefone do usuário.
	 * 
	 */
	public String getTelefone() {
		return telefone;
	}
	
	/**
	 * Define o telefone do Usuário.
	 * @param String telefone a ser definido pelo usuário.
	 * 
	 */
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	
	/**
	 * Retorna o nome do Usuário.
	 * @return nome do usuário.
	 * 
	 */
	public String getNome() {
		return nome;
	}
	
	/**
	 * Define o nome do Usuário.
	 * @param String nome a ser definido pelo usuário.
	 * 
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	/**
	 * Retorna o email do Usuário.
	 * @return email do usuário.
	 * 
	 */
	public String getEmail() {
		return email;
	}
	
	/**
	 * Define o email do Usuário.
	 * @param String email a ser definido pelo usuário.
	 * 
	 */
	public void setEmail(String email) {
		this.email = email;
	}
	
	/**
	 * Retorna o endereço do Usuário.
	 * @return endereco do usuário.
	 * 
	 */
	public String getEndereco() {
		return endereco;
	}
	
	/**
	 * Define o endereço do Usuário.
	 * @param String endereco a ser definido pelo usuário.
	 * 
	 */
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	
	/**
	 * Retorna uma lista de Perfis de Usuário.
	 * @return lista de Perfis de usuário.
	 * 
	 */
	public Set<Perfil> getListaPerfil() {
		return listaPerfil;
	}
	
	/**
	 * Define uma lista de Perfis de Usuário.
	 * @param Set<Perfil> listaPerfil.
	 * 
	 */
	public void setListaPerfil(Set<Perfil> listaPerfil) {
		this.listaPerfil = listaPerfil;
	}
	
}
